package file

import (
	"fmt"
	"io"
	"os"
	"syscall"
)

func CreateFile() {
	// 创建文件，权限0666
	_, _ = os.Create("tmp.txt") // *File, error

	// 根据文件描述符，创建文件
	stdout := os.NewFile(uintptr(syscall.Stdout), "/dev/stdout")
	_, _ = stdout.WriteString("hello world ")
	defer stdout.Close()
}

func ReadFile() {
	// 只读方式打开文件
	file, err := os.Open("demo.txt")
	if err != nil {
		fmt.Println("open file failed!, err:", err)
		return
	}
	defer file.Close()

	// 定义接受文件读取数据
	var buf [128]byte
	var content []byte
	for {
		n, err := file.Read(buf[:])
		// 检测io关闭，结束读取
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Println("read file err ", err)
			return
		}
		content = append(content, buf[:n]...)
	}
	fmt.Println(string(content))

}

func WriteFile() {
	// 创建文件
	file, err := os.Create("demo.txt")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer file.Close()
	for i := 0; i < 100; i++ {
		file.WriteString("hello world \n")
		file.Write([]byte("cd\n"))
	}
}

// 判断文件是否存在
func PathExists(path string) {
	_, err := os.Stat(path)
	if err == nil {
		fmt.Println("文件或目录已存在")
	}
	if os.IsNotExist(err) {
		fmt.Println("文件或目录未存在")
	}
}
